﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Dao.Intermediarios;
using Dao;

namespace _InformaticaIndustrial_DerivdosVinicos.Interfaz
{
    public partial class MaestroArticulos : Form
    {
        #region Property

        string[] elementos;
        private Principal principal;
        string _tipo;
        string _tipoArticulo;
        object _ma;

        IPMateriaPrima ipMateriaPrima = new IPMateriaPrima();
        IPComponente ipComponente = new IPComponente();
        IPModeloInventario ipModeloInv = new IPModeloInventario();
        IPProductoProcesoElaboracion ipPPE = new IPProductoProcesoElaboracion();
        IPCentroTrabajo ipCT = new IPCentroTrabajo();
        IPMedida ipMedida = new IPMedida();
        IPTipoMaestroArticulo iPTipoMaestroArticulo = new IPTipoMaestroArticulo();

        MateriaPrima mpUltima;
        ProductoProcesoElaboracion ppeUltimo;
        Componente compUltima;

        IList<ProductoProcesoElaboracion> prodProcElabLista = new IPProductoProcesoElaboracion().getAll<ProductoProcesoElaboracion>();
        IList<Componente> componentesLista = new IPComponente().getAll<Componente>();
        IList<MateriaPrima> materiaPrimaLista = new IPMateriaPrima().getAll<MateriaPrima>();

        MateriaPrima materiaPrima;
        Componente componente;
        ProductoProcesoElaboracion ppe;

        #endregion Property

        #region Methods

        public MaestroArticulos(string tipo, object ma, string tipoArticulo)
        {
            InitializeComponent();
            LoadCombo();
            this._tipo = tipo;
            this._tipoArticulo = tipoArticulo;
            this._ma = ma;
            panelCT.Visible = false;
            buttonAceptar.Enabled = true;
        }

        private void LoadCombo()
        {            
            cbMedidas.DataSource = ipMedida.getAll<Medida>();
            cbTipoArt.DataSource = iPTipoMaestroArticulo.getAll<TipoMaestroArticulo>();
            cbCT.DataSource = ipCT.getAll<CentroTrabajo>();
            cbModeloInv.DataSource = ipPPE.getAll<ModelosInv>();

            cbModeloInv.DataSource = new IPModeloInventario().getAll<ModelosInv>();
            cbModeloInv.DisplayMember = "NombreModelo";
            cbModeloInv.ValueMember = "Id";
            
            if (_tipoArticulo == "MP")
                {
                    MateriaPrima _mp;
                    _mp = (MateriaPrima) _ma;
                    cbMedidas.SelectedValue = _mp.IdMedida;
                    cbTipoArt.SelectedValue = 1;
                    txtNombre.Text = _mp.nombre;
                    txtCodigo.Text = _mp.costo.ToString();
                    cbModeloInv.SelectedValue = _mp.IdModeloInventario;                     
                }
               
         }

        #endregion Methods

        #region Events

        private void buttonAceptar_Click(object sender, EventArgs e)
        {
            errorProvider1.Dispose();

            try
            {
                if (txtNombre.Text.Length != 0)
                {
                    switch (cbTipoArt.SelectedValue.ToString())
                    {
                        case "1":
                            materiaPrima = new MateriaPrima();
                            materiaPrima.nombre = txtNombre.Text;
                            materiaPrima.IdMedida = Convert.ToInt16(cbMedidas.SelectedValue);
                            materiaPrima.costo = float.Parse(txtCosto.Text);
                            materiaPrima.codigo = txtCodigo.Text.ToString();

                            if (cbModeloInv.SelectedIndex == 0)
                            {
                                materiaPrima.IdModeloInventario = 1;
                            }
                            else if (cbModeloInv.SelectedIndex == 1)
                            {
                                materiaPrima.IdModeloInventario = 2;
                            }
                            else
                            {
                                materiaPrima.IdModeloInventario = 3;
                            }

                            materiaPrima.Activo = true;
                            //materiaPrima.cantidad =

                            materiaPrima.c1 = "01";
                            materiaPrima.c2 = elementos[1];
                            materiaPrima.c3 = elementos[2];
                            materiaPrima.c4 = elementos[3];

                            ipMateriaPrima.save<MateriaPrima>(materiaPrima);
                            Intermediario.confirmarCambios();
                            MessageBox.Show("Materia Prima guardada correctamente");
                            buttonAceptar.Enabled = false;
                            break;
                        case "2":
                            componente = new Componente();
                            componente.nombre = txtNombre.Text;
                            componente.IdMedida = Convert.ToInt16(cbMedidas.SelectedValue);
                            componente.costo = float.Parse(txtCosto.Text);
                            componente.codigo = txtCodigo.Text.ToString();

                            if (cbModeloInv.SelectedIndex == 0)
                            {
                                componente.IdModeloInventario = 1;
                            }
                            else if (cbModeloInv.SelectedIndex == 1)
                            {
                                componente.IdModeloInventario = 2;
                            }
                            else
                            {
                                componente.IdModeloInventario = 3;
                            }

                            componente.Activo = true;

                            componente.c1 = "02";
                            componente.c2 = elementos[1];
                            componente.c3 = elementos[2];
                            componente.c4 = elementos[3];

                            ipComponente.save<Componente>(componente);
                            Intermediario.confirmarCambios();
                            MessageBox.Show("Componente guardado correctamente");
                            buttonAceptar.Enabled = false;
                            break;
                        case "3":
                            ppe = new ProductoProcesoElaboracion();
                            ppe.nombre = txtNombre.Text;
                            ppe.IdPPE = Convert.ToInt16(cbCT.SelectedValue);
                            ppe.IdMedida = Convert.ToInt16(cbMedidas.SelectedValue);

                            if (cbModeloInv.SelectedIndex == 0)
                            {
                                ppe.IdModeloInventario = 1;
                            }
                            else if (cbModeloInv.SelectedIndex == 1)
                            {
                                ppe.IdModeloInventario = 2;
                            }
                            else
                            {
                                ppe.IdModeloInventario = 3;
                            }

                            ppe.codigo = txtCodigo.Text.ToString();
                            ppe.Activo = true;
                            //ppe.costo = float.Parse(txtCosto.Text);

                            ppe.c1 = "03";
                            ppe.c2 = elementos[1];
                            ppe.c3 = elementos[2];
                            ppe.c4 = elementos[3];

                            ipPPE.save<ProductoProcesoElaboracion>(ppe);
                            Intermediario.confirmarCambios();
                            MessageBox.Show("Producto en Proceso de Elaboración guardado correctamente");
                            buttonAceptar.Enabled = false;
                            break;
                        default:
                            break;
                    }
                }
                else
                {
                    errorProvider1.SetError(txtNombre, "Debe ingresar un nombre");
                }
            }
            catch (Exception)
            {                
                throw;
            }
        }

        private void MaestroArticulos_Load(object sender, EventArgs e)
        {

        }

        private void cbTipoArt_SelectedValueChanged(object sender, EventArgs e)
        {
            if (materiaPrimaLista.Count > 0)
            {
                mpUltima = materiaPrimaLista.Last();
            }

            if (componentesLista.Count > 0)
            {
                compUltima = componentesLista.Last();
            }

            if (prodProcElabLista.Count > 0)
            {
                ppeUltimo = prodProcElabLista.Last();
            }

            buttonAceptar.Enabled = true;

            if (cbTipoArt.SelectedValue.ToString() == "1")
            {
                panelCT.Visible = false;

                if (mpUltima != null)
                {
                    if (Convert.ToInt16(mpUltima.c4) < 99)
                    {
                        txtCodigo.Text = "01" + "." + mpUltima.c2.Trim() + "." + mpUltima.c3.Trim() + "." + (((Convert.ToInt16(mpUltima.c4)) + 1) < 9 ? ("0" + (Convert.ToInt16(mpUltima.c4) + 1)).ToString() : (Convert.ToInt16(mpUltima.c4) + 1).ToString());
                    }
                    else if (Convert.ToInt16(mpUltima.c3) < 99)
                    {
                        txtCodigo.Text = "01" + "." + mpUltima.c2.Trim() + "." + (((Convert.ToInt16(mpUltima.c3)) + 1) < 9 ? ("0" + (Convert.ToInt16(mpUltima.c3) + 1)).ToString() : (Convert.ToInt16(mpUltima.c3) + 1).ToString()) + "." + mpUltima.c4.Trim();
                    }
                    else
                    {
                        txtCodigo.Text = "01" + "." + (((Convert.ToInt16(mpUltima.c2)) + 1) < 9 ? ("0" + (Convert.ToInt16(mpUltima.c2) + 1)).ToString() : (Convert.ToInt16(mpUltima.c2) + 1).ToString()) + "." + mpUltima.c3.Trim() + "." + mpUltima.c4.Trim();
                    }

                }
                else
                {
                    txtCodigo.Text = "01.00.00.01";
                }
                    char[] separador = new char[] { '.' };
                    elementos = txtCodigo.Text.Split(separador); 
            }
            else if (cbTipoArt.SelectedValue.ToString() == "2")
            {
                panelCT.Visible = false;

                if (compUltima != null)
                {
                    if (Convert.ToInt16(compUltima.c4) < 99)
                    {
                        txtCodigo.Text = "02" + "." + compUltima.c2.Trim() + "." + compUltima.c3.Trim() + "." + (((Convert.ToInt16(compUltima.c4)) + 1) < 9 ? ("0" + (Convert.ToInt16(compUltima.c4) + 1)).ToString() : (Convert.ToInt16(compUltima.c4) + 1).ToString());
                    }
                    else if (Convert.ToInt16(mpUltima.c3) < 99)
                    {
                        txtCodigo.Text = "02" + "." + compUltima.c2.Trim() + "." + (((Convert.ToInt16(compUltima.c3)) + 1) < 9 ? ("0" + (Convert.ToInt16(compUltima.c3) + 1)).ToString() : (Convert.ToInt16(compUltima.c3) + 1).ToString()) + "." + compUltima.c4.Trim();
                    }
                    else
                    {
                        txtCodigo.Text = "02" + "." + (((Convert.ToInt16(compUltima.c2)) + 1) < 9 ? ("0" + (Convert.ToInt16(compUltima.c2) + 1)).ToString() : (Convert.ToInt16(compUltima.c2) + 1).ToString()) + "." + compUltima.c3.Trim() + "." + compUltima.c4.Trim();
                    } 
                }
                else
                {
                    txtCodigo.Text = "02.00.00.01";
                }

                char[] separador = new char[] { '.' };
                elementos = txtCodigo.Text.Split(separador);
            }
            else
            {
                panelCT.Visible = true;
                txtCosto.Visible = false;

                if (ppeUltimo != null)
                {
                    if (Convert.ToInt16(ppeUltimo.c4) < 99)
                    {
                        txtCodigo.Text = "03" + "." + ppeUltimo.c2.Trim() + "." + ppeUltimo.c3.Trim() + "." + (((Convert.ToInt16(ppeUltimo.c4)) + 1) < 9 ? ("0" + (Convert.ToInt16(ppeUltimo.c4) + 1)).ToString() : (Convert.ToInt16(ppeUltimo.c4) + 1).ToString());
                    }
                    else if (Convert.ToInt16(mpUltima.c3) < 99)
                    {
                        txtCodigo.Text = "03" + "." + ppeUltimo.c2.Trim() + "." + (((Convert.ToInt16(ppeUltimo.c3)) + 1) < 9 ? ("0" + (Convert.ToInt16(ppeUltimo.c3) + 1)).ToString() : (Convert.ToInt16(ppeUltimo.c3) + 1).ToString()) + "." + ppeUltimo.c4.Trim();
                    }
                    else
                    {
                        txtCodigo.Text = "03" + "." + (((Convert.ToInt16(ppeUltimo.c2)) + 1) < 9 ? ("0" + (Convert.ToInt16(ppeUltimo.c2) + 1)).ToString() : (Convert.ToInt16(ppeUltimo.c2) + 1).ToString()) + "." + ppeUltimo.c3.Trim() + "." + ppeUltimo.c4.Trim();
                    } 
                }
                else
                {
                    txtCodigo.Text = "03.00.00.01";
                }

                char[] separador = new char[] { '.' };
                elementos = txtCodigo.Text.Split(separador);
            }
        }

        private void buttonCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        #endregion Events
    }
}
